package com.chj.chap05.oom;

import java.util.ArrayList;
import java.util.List;

/**
 * JDK1.7 以下运行,VM Args： -XX:PermSize=10M -XX:MaxPermSize=10M
 */
public class RuntimeConstantPoolOOM {
    /**
     * 注：在JDK1.6 及以前版本中，由于常量池分配在永久代内，可以通过-XX:PermSize 和 -XX:MaxPermSize 限制方法区的大小，从而间接限制其中常量池的容量。
     * 注意JDK1.8已经使用元空间 来代替永久区，所以在1.8中，这两个参数将被忽略，而改使用-XX:MetaspaceSize -XX:MaxMetaspaceSize 来控制元空间
     */
    public static void main(String[] args) {
        //使用List保持这常量池引用，避免Fuli GC回收常量池行为
        List<String> list = new ArrayList<String>();
        //10MB的PermSize在integer范围内足够产生OOM了
        int i =1024*1024;
        while(true){
            list.add(String.valueOf(i++).intern());
        }
    }

}
